<?php

	class Tools {

		//Test si la variable a �t� envoy�
		public static function issetValue($value, $type = 'POST') {
			if($type === 'POST') {
				if(isset($_POST[$value]) && !empty($_POST[$value]))
					return true;
				else 	
					return false;	
			}
			elseif ($type === 'GET') {
				if(isset($_GET[$value]) && !empty($_GET[$value]))
					return true;
				else 	
					return false;
			
			}
		}
		
		//R�cup�re les valeurs pass�es
		public static function getValue($value, $type = 'POST') {
			$retour = '';
			if($type === 'POST') {
				if(self::issetValue($value, $type))
					$retour = $_POST[$value];
			}
			elseif($type === 'GET') {
				if(self::issetValue($value, $type))
					$retour = $_GET[$value];
			}
			return $retour;
		}
		
		
		public static function encrypt($string) {
			if(!empty($string))
				return hash('sha512', $string);
		
		}
		
		//Sort une chaine al�atoire
		public static function randomString($length = 8) {
			$string = 'abcdefghijkmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
			$passwd = '';
			for ($i = 0; $i < $length; $i++)
				$passwd .= Tools::substr($string, mt_rand(0, Tools::strLen($string) - 1), 1);
			return $passwd;
		}
		
		//Sort une sous-chaine
		public static function substr($string, $start, $length = false, $encoding = 'utf-8') {
			if (is_array($string))
				return false;
			if (function_exists('mb_substr'))
				return mb_substr($string, (int)($start), ($length === false ? Tools::strlen($string) : (int)($length)), $encoding);
			return substr($string, $start, ($length === false ? Tools::strlen($string) : (int)($length)));
		}
		
		// Calcul la longueur de la chaine
		public static function strLen($string) {
			$longueur = strlen($string);
			return $longueur;
		}
		
		public static function redirect($page) {
			header('Location:'.$page);
		}
		
		public static function getDate($format = 'entier') {
			if($format == 'entier') {
				return date('Y-m-j H:i:s');
			}
			elseif($format == 'jour') {
				return date('Y-m-j');
			}
		}
		
		public static function createInput($name, $id, $value = '', $type = 'text', $size = false, $maxlength = false, $class = false) {
			$input = '<input type="'.$type.'" name="'.$name.'" id="'.$id.'"';
			if(!empty($value)) $input.= ' value="'.$value.'"';
			if($size) $input.= ' size='.$size;
			if($maxlength) $input.= ' maxlength='.$maxlength;
			if($class) $input.= ' class='.$class;
		
			$input.= ' />';
			return $input;
		}
		
		public static function createSelect($name, $id, $valeurs, $size = false, $class = false) {
		
			$select = '<select name="'.$name.'" id="'.$id.'"';
			if($size) $select.= ' size='.$size;
			if($class) $select.= ' class='.$class;
			$select .= '>';
			
			foreach($valeurs as $valeur) {
				$select .= '<option value="'.$valeur['value'].'">'.$valeur['texte'].'</option>';
			}
			$select .= '</select>';
			
			return $select;
			
		}
		
		public static function displayError($message, $die = 1) {
			echo '<div class="error">
					'.$message.'
				</div>';
			if($die == 1)
				die;
		}
		
		public static function getMonthLetter($temp) {
			switch ($temp) {
				case '01' : 
					$temp = 'Janvier';
					break;
				case '02' : 
					$temp = 'F&eacute;vrier';
					break;
				case '03' : 
					$temp = 'Mars';
					break;
				case '04' : 
					$temp = 'Avril';
					break;
				case '05' : 
					$temp = 'Mai';
					break;
				case '06' : 
					$temp = 'Juin';
					break;
				case '07' : 
					$temp = 'Juillet';
					break;
				case '08' : 
					$temp = 'Ao&ucirc;t';
					break;
				case '09' : 
					$temp = 'Septembre';
					break;
				case '10' : 
					$temp = 'Octobre';
					break;
				case '11' : 
					$temp = 'Novembre';
					break;
				case '12' : 
					$temp = 'D&eacute;cembre';
					break;
			}
			return $temp;
		}
		
		//R�cup�re le jour de la semaine correspondant a son indice (Lundi = 1, Dimance = 7)
		public static function getDayLetter($temp) {
			switch ($temp) {
                                case '00' : 
					$temp = 'Dimanche';
					break;
				case '01' : 
					$temp = 'Lundi';
					break;
				case '02' : 
					$temp = 'Mardi';
					break;
				case '03' : 
					$temp = 'Mercredi';
					break;
				case '04' : 
					$temp = 'Jeudi';
					break;
				case '05' : 
					$temp = 'Vendredi';
					break;
				case '06' : 
					$temp = 'Samedi';
					break;
				
			}
			return $temp;
		}
		
		//R�cup�re tout les mois de l'ann�e sous le nom Francais
		//Param�tre :aucun
		//Retourne tableau de String('index' => valeur, "affichage" => valeur)
		public static function getMonths() {
			return array(array('index' => 1, 'affichage' => "Janvier"), array('index' => 2, 'affichage' => "F&eacute;vrier"), array('index' => 3, 'affichage' => "Mars"), array('index' => 4, 'affichage' => "Avril"), 
						array('index' => 5, 'affichage' => "Mai"), array('index' => 6, 'affichage' => "Juin"), array('index' => 7, 'affichage' => "Juillet"), array('index' => 8, 'affichage' => "Ao&ucirc;t"), 
						array('index' => 9, 'affichage' => "Septembre"), array('index' => 10, 'affichage' => "Octobre"), array('index' => 11, 'affichage' => "Novembre"), array('index' => 12, 'affichage' => "D&eacute;cembre"));
		}
		
		//R�cup�re toutes les ann�es depuis 2013
		//Param�tre : aucun
		//Retourne tableau d'Entier
		public static function getYears() {
			$year = date('Y');
			$tabRetour = array();
			for($i = $year; $i > 2012; $i--) {
				$tabRetour[] = $i;
			}
			return $tabRetour;
		}
		
		public static function ecrirePDF($commentaire, $fonction = 1) {
			$commentaire = str_replace('<div>', '<br>', $commentaire);
			$commentaire = str_replace('</div>', "", $commentaire);
			
			/*if($fonction == 1) {
				$commentaire = utf8_encode($commentaire);
				$commentaire = utf8_decode($commentaire);
			}*/
			return utf8_decode($commentaire);
		}
		
		public static function reverseHtmlToPdf($commentaire) {
			
			/*$commentaire = str_replace('<p>', '', $commentaire);
			$commentaire = str_replace('</p>', "\n", $commentaire);
			$commentaire = str_replace('<div>', '', $commentaire);
			$commentaire = str_replace('</div>', "\n", $commentaire);
			$commentaire = str_replace('&rsquo;', "'", $commentaire);
			$commentaire = str_replace('&euro;', "�", $commentaire);
			$commentaire = str_replace('&#39;', "'", $commentaire);
			$commentaire = str_replace('&reg;', "�", $commentaire);
			$commentaire = str_replace('&#39;', "'", $commentaire);
			$commentaire = str_replace('°', "�", $commentaire);
			$commentaire = str_replace('é', "�", $commentaire);
			$commentaire = str_replace('è', "�", $commentaire);
			$commentaire = str_replace('ë', "�", $commentaire);
			$commentaire = str_replace('à', "�", $commentaire);
			$commentaire = str_replace('Û', "�", $commentaire);
			$commentaire = str_replace('ê', "�", $commentaire);
			$commentaire = str_replace('É', "�", $commentaire);
			$commentaire = str_replace('À', "�", $commentaire);
			$commentaire = str_replace('Ë', "�", $commentaire);
			$commentaire = str_replace('ô', "�", $commentaire);
			$commentaire = str_replace('È', "�", $commentaire);
			$commentaire = str_replace('â', "�", $commentaire);
			$commentaire = str_replace('ç', "�", $commentaire);
			$commentaire = str_replace('ï', "�", $commentaire);
			$commentaire = str_replace('Ã¢', "�", $commentaire);
			$commentaire = str_replace('&oelig;', "oe", $commentaire);*/
			$commentaire = html_entity_decode($commentaire); 
			$commentaire = utf8_decode($commentaire);
			return $commentaire;
		}
		
		public static function replacementAccent($commentaire, $type= 1) {
			if($type == 1) {
				$commentaire = str_replace('&nbsp;', "", $commentaire);
			}
			$commentaire = html_entity_decode($commentaire);
			$commentaire = str_replace('&rsquo;', "'", $commentaire);
			$commentaire = str_replace('&euro;', "�", $commentaire);
			$commentaire = str_replace('&#39;', "'", $commentaire);
			$commentaire = str_replace('&reg;', "�", $commentaire);
			$commentaire = str_replace('&#39;', "'", $commentaire);
			$commentaire = str_replace('°', "�", $commentaire);
			$commentaire = str_replace('é', "�", $commentaire);
			$commentaire = str_replace('è', "�", $commentaire);
			$commentaire = str_replace('ë', "�", $commentaire);
			$commentaire = str_replace('à', "�", $commentaire);
			$commentaire = str_replace('Û', "�", $commentaire);
			$commentaire = str_replace('ê', "�", $commentaire);
			$commentaire = str_replace('É', "�", $commentaire);
			$commentaire = str_replace('À', "�", $commentaire);
			$commentaire = str_replace('Ë', "�", $commentaire);
			$commentaire = str_replace('ô', "�", $commentaire);
			$commentaire = str_replace('È', "�", $commentaire);
			$commentaire = str_replace('â', "�", $commentaire);
			$commentaire = str_replace('ç', "�", $commentaire);
			$commentaire = str_replace('ï', "�", $commentaire);
			$commentaire = str_replace('Ã¢', "�", $commentaire);
			$commentaire = str_replace('&oelig;', "oe", $commentaire);
			return $commentaire;
		}
		
		public static function listeManufacturer() {
			$sql=	'SELECT
						m.*
					FROM manufacturer m
					ORDER BY m.name ASC
					';
			$ms = Db::Execute($sql, true);
			return($ms);
		}
		
		public static function listeCategory() {
			$sql=	'SELECT
						c.*
					FROM category c
					ORDER BY c.name_category ASC
					';
			$ms = Db::Execute($sql, true);
			return($ms);
		}
		
		//Permet de formater une cha�ne selon le format voulu
		public static function format($format, $string) {
			$temp = $string;
			if($format == 'num_secu') {
				$temp = Tools::substr($temp, 0, 1) . ' ' . Tools::substr($temp, 1, 2) . ' ' . Tools::substr($temp, 3, 2) . ' ' . Tools::substr($temp, 5, 2) . ' ' . Tools::substr($temp, 7, 3) . ' ' . Tools::substr($temp, 10, 3) . ' ' . Tools::substr($temp, 13, 2);
			}
			return $temp;
		}
		
		//V�rifie si le site est en maintenance
		public static function verifMaintenance() {
			$sql =	'SELECT c.valeur FROM conf c WHERE c.id_conf = 2';
			$maintenance = Db::Execute($sql, true);
			return $maintenance;
		}
		
		//Fonction qui sert � tout les setters de DateTime
		//Param�tre : (String) ou (DateTime)
		//Retourne (String) ou (DateTime)
		public static function setterDate($temp) {
			$retour = '';
			if($temp instanceof DateTime) 
				$retour = $temp;
			else if($temp == '0000-00-00')
				return '0000-00-00';
			else {
                $temp = utf8_decode($temp);
				$tab = date_parse_from_format('d/m/Y', $temp);
				if($tab['error_count'] < 2)
					$retour = DateTime::createFromFormat('d/m/Y', $temp);
				else {
					$tab = date_parse_from_format('Y-m-d', $temp);
					if($tab['error_count'] < 2)
						$retour = new DateTime($temp);
					else
						$retour = '0000-00-00';
				}
			}	
			
			return $retour;
		}
		
		//Fonction qui sert � tout les getters de DateTime
		//Param�tre : (String) ou (DateTime)attribut, (String)format
		//Retourne (String) ou (DateTime)
		public static function getterDate($temp, $format) {
			if($temp instanceof DateTime)
				return $temp->format($format);
			else
				return $temp;
		}
		
		//Fonction qui sert à tout les getters de Téléphone et Fax
		//Paramètre : (String)tel, (String)separateur
		//Retourne (String)
		public static function getterPhone($tel, $separateur = ' ') {
			if(strlen($tel) == 14) {
				if(preg_match('`^(0[1-9][-.\s]?(\d{2}[-.\s]?){3}\d{2})$`', $tel))
					return Tools::substr($tel, 0, 2) . $separateur . Tools::substr($tel, 3, 2) . $separateur . Tools::substr($tel, 6, 2) . $separateur . Tools::substr($tel, 9, 2) . $separateur . Tools::substr($tel, 12, 2);
			}
			else if(strlen($tel) == 10) {
				if(preg_match('`^[0-9]{10}$`', $tel))
					return Tools::substr($tel, 0, 2) . $separateur . Tools::substr($tel, 2, 2) . $separateur . Tools::substr($tel, 4, 2) . $separateur . Tools::substr($tel, 6, 2) . $separateur . Tools::substr($tel, 8, 2);
			}
			else
				return $tel;
		}
		
		//Fonction qui sert à tout les setters de Téléphone et Fax
		//Paramètre : (String)tel
		//Retourne (String)
		public static function setterPhone($tel) {
			if(strlen($tel) == 14) {
				if(preg_match('`^(0[1-9][-.\s]?(\d{2}[-.\s]?){3}\d{2})$`', $tel))
					return Tools::substr($tel, 0, 2) . Tools::substr($tel, 3, 2) . Tools::substr($tel, 6, 2) . Tools::substr($tel, 9, 2) . Tools::substr($tel, 12, 2);
			}
			return $tel;
		}
		
		//Fonction qui sert à tout mettre en majuscule sur une chaîne de caractère
		//Paramètre : (String)lastname
		//Retourne (String)
		public static function toUpper($lastname) {
			return strtoupper($lastname);
		}
		
		//Fonction qui sert à ne mettre que le premier caractère en majuscule
		//Paramètre : (String)firstname
		//Retourne (String)
		public static function ucfirst($firstname) {
			return ucfirst(strtolower($firstname));
		}
		
		//Fonction qui sert au getter de numéro finess
		//Paramètre : (String)finess, (String)separateur
		//Retourne (String)
		public static function getterFiness($finess, $separateur = " ") {
			if(Tools::strlen($finess) == 9) {
				if(preg_match('`^[0-9]{9}$`', $finess))
					return Tools::substr($finess, 0, 2) . $separateur . Tools::substr($finess, 2, 3) . $separateur . Tools::substr($finess, 5, 4);
			}
			else if(Tools::strlen($finess) == 11) {
				if(preg_match('`^[0-9]{2}.[0-9]{3}.[0-9]{4}$`', $finess))
					return Tools::substr($finess, 0, 2) . $separateur . Tools::substr($finess, 4, 3) . $separateur . Tools::substr($finess, 7, 4);
			}
			return $finess;
		}
		
		//Fonction qui sert au setter du numéro finess
		//Paramètre : (String)finess
		//Retourne (String) 
		public static function setterFiness($finess) {
			if(Tools::strlen($finess) == 9) {
				if(preg_match('`^[0-9]{9}$`', $finess))
					return $finess;
			}
			else if(Tools::strlen($finess) == 11) {
				if(preg_match('`^[0-9]{2}.[0-9]{3}.[0-9]{4}$`', $finess))
					return Tools::substr($finess, 0, 2) . Tools::substr($finess, 3, 3) . Tools::substr($finess, 7, 4);
			}
			
			return $finess;
		}
		
		//Tronque la chaine de caractère passé en paramètre
		//Paramètre : (String)text, OPTIONNEL (int)length, (int)fonction
		//Retourne (String)
		public static function truncate($text, $length=38, $fonction = 1) {
			$trunc = (strlen($text)>$length)?true:false;
	
			if($fonction == 2)
				$text = utf8_encode($text);
			
			if($trunc) {
				return substr($text, 0, $length).'...';
			}
			else {
				return $text;
			}
	    }
		
	}
	

?>